package view;

import java.awt.Dimension;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;

import common.Contexto;
import controller.ConjuntoController;
import controller.PrendaController;
import model.Conjunto;
import model.Prenda;
import model.Producto;

@SuppressWarnings("serial")
public class ListaProductosPanel extends JPanel {

	private JButton modificarB, volverB;
	private JScrollPane productosSP;
	private JTable productosT;
	private ModificarProductosTableModel tableModel;
	private String tipoProducto;
	
	public ListaProductosPanel(List<? extends Producto> productos, String tipoProducto) {
		this.tableModel = new ModificarProductosTableModel(productos);
		this.tipoProducto = tipoProducto;
		initGui();
		layoutComponents();
		initActions();
	}

	private void initGui() {
		volverB = new JButton("Volver");
		modificarB = new JButton("Modificar");

		productosT = new JTable(tableModel);
		productosT.setPreferredScrollableViewportSize(new Dimension(300,200));
		productosSP = new JScrollPane(productosT);
	}

	

	private void layoutComponents() {
		this.setLayout(new GridBagLayout());

		GridBagConstraints c = new GridBagConstraints();
		c.gridx = 0;
		c.gridy = 0;
		c.gridwidth = 5;
		c.ipadx = 180;
		c.ipady = 100;
		c.fill = GridBagConstraints.BOTH;
		add(productosSP, c);
		
		c.gridx = 0;
		c.gridy = 2;
		c.gridwidth = 1;
		c.gridheight = 1;
		c.ipady = 0;
		c.insets = new Insets(20, 0, 20, 0);

		
		add(modificarB, c);
		c.gridx = 2;
		add(volverB, c);

	}

	private void initActions() {
		modificarB.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				Producto producto = getProductoSeleccionado();
				if(producto != null) {
					if(producto instanceof Prenda) {
						PrendaController.getInstance().mostrarPrenda(producto.getCodigo());
					} else if (producto instanceof Conjunto) {
						ConjuntoController.getInstance().mostrarConjunto(producto.getCodigo());
					}
					SwingUtilities.windowForComponent(ListaProductosPanel.this).dispose();
				} else {
					notificarError("Por favor seleccione un producto del listado");
				}
			}
		});

		volverB.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				SwingUtilities.windowForComponent(ListaProductosPanel.this).dispose();
			}
		});
		
	}
	
	private Producto getProductoSeleccionado() {
		return tableModel.getProductoSeleccionado();
	}
	
	public void showPanel() {
		final JFrame mainFrame = new JFrame();
		mainFrame.setTitle(tipoProducto);
		mainFrame.getContentPane().add(this);
		mainFrame.setPreferredSize(new Dimension(600, 450));
		mainFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		mainFrame.pack();
		mainFrame.setLocationRelativeTo(null);
		mainFrame.setVisible(true);
	}
	
	private void notificarError(String error) {
		Contexto.displayErrorMessage(ListaProductosPanel.this,error);
	}
	
	public void actualizarProductos(List<Producto> productos) {
		tableModel.setProductos(productos);
	}

}